package com.bitantenna;
import java.io.IOException;
import java.util.Random;

import utils.Utils;

import com.bitantenna.messages.MessageFrame;



/**
 * 
 * Implementa un generador de datos random que puede usarse como fuente de datos
 * para una radio (usado para testing).
 * 
 * @author cesare
 *
 */
class StreamProducer  extends SpotTask {
		private int sampleOffset=0;
		private int anyOffset=0;
		
		public StreamProducer(Spot s) {
			super(s);
		}
		
		@Override
		protected void performTask(Spot spot) throws IOException {
			if (!spot.settings().spotInput().isCompleted()) {
				if (synchronizeHeader()) {
					produceHeader();					
				} else {
					produceSample();
					shapeTrafficSleep();
				}
			}
		}

		protected boolean synchronizeHeader() {			
			return anyOffset%20==0;
		}
		
		protected void produceHeader() {
			produceData(spot
				.settings()
				.spotInput()
				.readHeader());		
			
						
			++anyOffset;
		}
		
		protected void produceSample() {
			 produceData(spot
				.settings()
				.spotInput()
				.readSample());
			 
			 ++sampleOffset;
			 ++anyOffset;
		}
		
		private void produceData(MessageFrame m) {
			
			m.dataOffset(sampleOffset);							
			spot.distributor.distributeMessage(m);		
		}

		Random r=new Random();
		protected void shapeTrafficSleep() {
			int sampleDuration=(int)spot.settings().spotInput().sampleDuration();
			 Utils.sleepSimple(sampleDuration);
		}


	}

